package lib.rv

import androidx.databinding.ObservableBoolean
import androidx.databinding.ViewDataBinding
import androidx.recyclerview.widget.GridLayoutManager
import androidx.recyclerview.widget.RecyclerView
import lib.rv.ap.BaseRvAdapter
import lib.rv.ap.ClickListener
import lib.rv.ap.IViewTypeModel
import lib.rv.ap.ViewTypeDelegate
import java.util.ArrayList

/**
 *  author: luoXiong
 *  e-mail: 382060748@qq.com
 *  date: 2019/11/11 14:06
 *  version: 1.0
 *  desc: 该接口封装了rv的常用方法操作，不要在ViewModel中实现该接口。
 */
abstract class AA : IRvAdapterBind<IViewTypeModel> {

}

interface IRvAdapterBind<M> {
    /**
     * 获取列表数据源
     * 这里必须返回: AbstractList , 因为 ObservableArrayList、MergeObservableList 都是继承AbstractList
     */
    fun getItemList(): List<M>

    /**
     * 获取列表适配器
     * 给RecyclerView添加Adpter，
     * Adapter属于View层的东西, 不建议定义到ViewModel中绑定，以免内存泄漏
     */
    fun getAdapter(): BaseRvAdapter<IViewTypeModel>? {
        return null
    }

    /**
     * 对每种ViewType类型的业务逻辑进行单独处理
     */
    fun getVTDList(): List<ViewTypeDelegate<ViewDataBinding, IViewTypeModel>>? {
        return null
    }

    /**
     * 获取列表分割线
     */
    fun getItemDecoration(): RecyclerView.ItemDecoration? {
        return null
    }

    fun getItemIds(): BaseRvAdapter.ItemIds<M>? {
        return null
    }

    fun getItemClickEvent(): ClickListener? {
        return null
    }

    /**
     * 是否显示空布局
     */
    fun isShowEmptyLayoutCondition(): ObservableBoolean? {
        return null
    }

    /**
     * 获取加载更多的监听
     */
//    fun getLoadMoreListener(): LoadMoreAdapter.LoadMoreListener? {
//        return null
//    }

    /**
     * 获取是否正在刷新中
     */
    fun getRefreshingOb(): ObservableBoolean? {
        return null
    }

    fun getSpanSizeLookup(): GridLayoutManager.SpanSizeLookup? {
        return null
    }

    /**
     * 如果是:2 , 说明是 grid_span in 2..11
     * 如果是:grid_span >= 12 , 说明是 StaggeredGridLayoutManager,  grid_span % 10
     * 获取布局管理器
     */
    fun getLayoutFlag(): Int? {
        return RecyclerView.VERTICAL
    }
}